package com.zhongge.jdbc01;

import java.sql.*;
import java.util.ResourceBundle;

/**
 * @ClassName JdbcTest
 * @Description TODO 测试JDBC
 * @Author zhongge
 * @Version 1.0
 */
public class JdbcTest {

    public static void main(String[] args) {
        //读取配置文件
        /**
         * ResourceBundle资源包==》配置文件对象
         * ResourceBundle.getBundle("配置文件路径");
         * 配置文件路径:包+文件名：com.zhongge.jdbc01.jdbc
         */
        ResourceBundle bundle = ResourceBundle.getBundle("com.zhongge.jdbc01.jdbc");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String userName = bundle.getString("userName");
        String password = bundle.getString("password");

        Connection conn = null;
        Statement stmt = null;
        ResultSet re = null;
        try {
            //注册驱动
            /**
             * 1. 将 JDBC 驱动程序从硬盘上的文件系统中加载到内存。
             * 2. 让 DriverManager 可以通过一个统一的接口来管理该驱动程序的所有连接操作。==>也说明一个驱动管理多个链接
             *              ==》说白了驱动只需要注册一次
             */
            Class.forName(driver);

            //获取连接
            //获取java.sql.Connection对象，
            // 该对象的创建标志着mysql进程和jvm进程之间的通道打开了。
            conn = DriverManager.getConnection(url, userName, password);

            //获取操作数据库的对象
            stmt = conn.createStatement();

            //执行sql语句
            //当获取到Statement对象后，调用这个接口中的相关方法即可执行SQL语句。
            /**
             * ResultSet ： 结果集
             */
            re = stmt.executeQuery("select * from book");

            //处理结果
            while (re.next()) {
                String name = re.getString("name");
                int price = re.getInt("price");
                String author = re.getString("author");
                String type = re.getString("type");
                Boolean isBorrow = re.getBoolean("isBorrow");
                System.out.println(name + "\t\t" + price + "\t\t" + author + "\t\t" + type + "\t\t" + isBorrow);
            }
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            if(re != null) {
                try {
                    re.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }

    }
}
